package accion;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import bean.*;

public class SeparacionAreaComunAccion {
	private ArrayList<SeparacionAreaComun> listaAreaComun = new ArrayList<SeparacionAreaComun>();
	private String rutaAreaComun="c:/BD/separacomun.txt";

	public ArrayList<SeparacionAreaComun> inicializarTablaSeparacionAreaComun() {

		FileReader fr = null;
		BufferedReader br = null;
		
		try {
			fr = new FileReader(rutaAreaComun);
			br = new BufferedReader(fr);

			String linea;
			
			ResidenteAccion residenteAccion = new ResidenteAccion();
			AreaComunAccion areaComunAccion = new AreaComunAccion();
			
			SeparacionAreaComun separacionAreaComun = null;
			Residente residente = null;
			AreaComun areaComun = null;
			
			residenteAccion.inicializarTablaResidente();
			areaComunAccion.inicializarTablaAreaComun();
			
			while ((linea = br.readLine()) != null) {
				String[] datos = linea.split("#");
				
				residente = residenteAccion.obtenerResidente(new Residente(datos[3],"","","",0,"",""));
				areaComun = areaComunAccion.obtenerAreaComun(new AreaComun(datos[4],"","",0,"",""));
				
				separacionAreaComun = new SeparacionAreaComun(datos[0], datos[1], residente, areaComun);
				listaAreaComun.add(separacionAreaComun);
			}

		} catch (FileNotFoundException e) {

			e.printStackTrace();
		} catch (IOException e) {

			e.printStackTrace();
		} finally {

			try {
				if (null != fr) {
					fr.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

		return listaAreaComun;
	}
	
	public boolean existeSeparacionAreaComun(SeparacionAreaComun separacionAreaComun) {

		boolean existeSeparacionAreaComun = false;

		for (SeparacionAreaComun areaComunDeLista:listaAreaComun) {
			if (areaComunDeLista.getFechaSeparacion().equals(separacionAreaComun.getFechaSeparacion())
					&& areaComunDeLista.getAreaComun().getCodigo().equals(separacionAreaComun.getAreaComun().getCodigo())) {
				existeSeparacionAreaComun = true;
			}
		}
		return existeSeparacionAreaComun;
	}
	
	public int actualizarSeparacionAreaComun(SeparacionAreaComun separacionAreaComun){
		int actualizacion = 0;
		int indiceDeLista = -1;
		int indiceaEliminarDeLista = 0;

		for (SeparacionAreaComun areaComunDeLista : listaAreaComun) {
			indiceDeLista++;
			if (areaComunDeLista.getFechaSeparacion().equals(separacionAreaComun.getFechaSeparacion())
					|| areaComunDeLista.getAreaComun().getCodigo().equals(separacionAreaComun.getAreaComun().getCodigo())) {
				indiceaEliminarDeLista = indiceDeLista;
				actualizacion = 1;
			}
		}

		listaAreaComun.remove(indiceaEliminarDeLista);
		listaAreaComun.add(indiceaEliminarDeLista, separacionAreaComun);
		actualizarTablaSeparacionAreaComun();

		return actualizacion;
	}
	
	public void actualizarTablaSeparacionAreaComun() {
		try{
			PrintWriter pw= new PrintWriter(new FileWriter(rutaAreaComun));
				
			for(SeparacionAreaComun areacomunDeLista:listaAreaComun){
				pw.println(areacomunDeLista.getFechaSeparacion() + "#"
						+ areacomunDeLista.getComentario()+ "#"
						+ areacomunDeLista.getResidente().getDni()+ "#"
						+ areacomunDeLista.getAreaComun().getCodigo()+ "#");
			}
			pw.close();
		}
		catch(Exception ex){
			
		}
	}	

			
	public int ingresarSeparacionAreaComun(SeparacionAreaComun separacionAreaComun) {
		
		int ingreso = 0;
		
		if (existeSeparacionAreaComun(separacionAreaComun) == false) {
			listaAreaComun.add(separacionAreaComun);
			ingreso=1;
		}
		actualizarTablaSeparacionAreaComun();
		return ingreso;
	}	

	public SeparacionAreaComun obtenerAreaComun(SeparacionAreaComun separacionAreaComun) {

		SeparacionAreaComun areacomunObtenido = null;

		for (SeparacionAreaComun areacomunDeLista : listaAreaComun) {
			if (areacomunDeLista.getFechaSeparacion().equals(separacionAreaComun.getFechaSeparacion())) {
				areacomunObtenido = areacomunDeLista;
			}
			}
		return areacomunObtenido;
	}

	public ArrayList<SeparacionAreaComun> listadoSeparacionAreasComunes(){
		
		ArrayList<SeparacionAreaComun> listaSeparacionAreas = new ArrayList<SeparacionAreaComun>();
		System.out.println(" Listado de Areas Comunes con Fecha de Separacion ");
		System.out.println("==================================================");
		for (SeparacionAreaComun ListaSeparacion:listaAreaComun) {
				listaSeparacionAreas.add(ListaSeparacion);
				System.out.println("Fecha Separacion: "+ListaSeparacion.getFechaSeparacion()+" ,Reservado por "+ListaSeparacion.getResidente()+" "+ListaSeparacion.getAreaComun()+" Motivo Evento: "+ ListaSeparacion.getComentario());
			}
		return listaSeparacionAreas;
	}
	

}
